Skip to content

로그 없는 아파치 SSL 오류, strace로 분석한 실전 트러블슈팅 ​

1줄 요약

httpd -t 구문 검사는 정상이지만 메인 에러로그 없이 데몬이 즉시 죽는 경우, strace httpd -X 포그라운드 실행으로 추적하면 특정 가상호스트 전용 로그 fd에 기록된 SSL Passphrase 및 키 페어 불일치 오류를 즉시 찾아낼 수 있다.

1. 장애 현상: 소리 없이 죽는 Apache (Silent Failure) ​

SSL 인증서 갱신 후 Apache 데몬 기동이 실패했다. 일반적인 장애와 달리 단서가 없는 상태였다.

  • 설정 파일 문법: httpd -t 실행 시 Syntax OK 정상 반환
  • 메인 에러 로그: /var/log/httpd/error_log에 아무런 에러 메시지가 기록되지 않음

프로세스가 시작하자마자 어떤 로그도 남기지 않고 즉시 종료되는 'Silent Failure' 상태였으므로, 시스템 콜 레벨에서 원인을 파악하기 위해 strace를 투입했다.

2. strace를 통한 시스템 콜 추적 ​

Apache를 단일 프로세스/포그라운드 디버그 모드(-X)로 기동하면서 시스템 콜을 캡처했다.

bash
# strace로 Apache 기동 과정 추적
strace /usr/sbin/httpd -X 2>&1 | tail -n 50

strace 출력의 마지막 부분에서 프로세스가 비정상 종료(exit_group(1))된 결정적 단서가 포착되었다.

c
// 1. SSL Passphrase 스크립트 실행 (파이프 통신)
pipe([206, 207]) = 0
clone(...) = 2834
read(206, "8", 1) ... // 암호 획득

// 2. 개인키 파일 로드
open("/etc/httpd/ssl/key.pem", O_RDONLY) = 203
read(203, "-----BEGIN RSA PRIVATE KEY-----\r"..., 4096) = 1781

// 3. 특정 가상호스트 전용 로그(fd=46)에 에러 출력 후 프로세스 즉시 종료
write(46, "[Thu May 21 05:31:27 2026] [error] SSL Library Error: ...", 63) = 63
exit_group(1)

핵심 발견: 메인 에러로그가 아닌 가상호스트 fd(46)에만 기록됨 ​

write 시스템 콜의 파일 디스크립터가 46이었다. 즉, 메인 /var/log/httpd/error_log가 아니라 특정 VirtualHost 설정에 정의된 별도 로그 파일에 에러를 쓰고 데몬이 죽어버렸기 때문에 메인 로그에서는 아무것도 보이지 않았던 것이다.

3. 원인 규명 및 해결 조치 ​

원인은 새로 갱신된 key.pem의 암호화 방식 변경 및 인증서와의 모듈러스(Modulus) 해시 불일치였다.

bash
# 1. 인증서와 개인키의 모듈러스 해시 일치 여부 검증
openssl x509 -noout -modulus -in /etc/httpd/ssl/cert.pem | openssl md5
openssl rsa -noout -modulus -in /etc/httpd/ssl/key.pem | openssl md5
# -> 두 MD5 해시값이 반드시 일치해야 정상 페어임

# 2. Passphrase가 걸려있는지 확인
openssl rsa -in /etc/httpd/ssl/key.pem -check
  1. 인증서와 짝이 맞는 올바른 개인키 파일로 교체.
  2. SSLPassPhraseDialog 스크립트가 반환하는 비밀번호와 개인키 암호를 일치시키거나 Passphrase가 제거된 키로 재배치.
  3. Apache 정상 재기동 완료.

4. 핵심 체크포인트 (Gotchas) ​

  1. httpd -X 포그라운드 디버그 모드: 백그라운드 포크(Fork) 없이 단일 스레드로 실행되므로 strace나 gdb 분석 시 필수 옵션이다.
  2. VirtualHost 에러로그 분산 주의: SSL 핸드셰이크나 키 로딩 실패는 메인 로그가 아닌 해당 가상호스트의 ErrorLog 지시자에만 남을 수 있으므로 모든 vhost 로그를 확인해야 한다.
  3. OpenSSL Modulus 검증 습관화: 인증서 갱신 작업 시 배포 전 openssl md5 모듈러스 비교를 자동화 스크립트에 포함하면 이러한 휴먼 에러를 100% 예방할 수 있다.

게시된 시간: 2026-05-21 05:47:07수정한 시간: 2026-08-15 13:57:00

Built with VitePress. | 📡 RSS Feed